/**********************************************************
    hal层中断处理头文件halintupt_t.h
***********************************************************/

#ifndef _HALINTUPT_T_H
#define _HALINTUPT_T_H

#ifdef CFG_X86_PLATFORM

typedef struct s_ILNEDSC {
    u32_t ild_modflg;
    u32_t ild_devid;
    u32_t ild_physid;
    u32_t ild_clxsubinr;
} ilnedsc_t;

// 中断异常描述符
typedef struct s_INTFLTDSC {
    spinlock_t  i_lock;
    u32_t       i_flg;
    u32_t       i_stus;
    uint_t      i_prity;        // 中断优先级
    uint_t      i_irqnr;        // 中断号
    uint_t      i_deep;         // 中断嵌套深度
    u64_t       i_indx;         // 中断计数
    list_h_t    i_serlist;
    uint_t      i_sernr;
    list_h_t    i_serthrdlst;   // 中断线程链表头
    uint_t      i_serthrdnr;    // 中断线程个数
    void*       i_onethread;    // 只有一个中断线程时直接用指针
    void*       i_rbtreeroot;   // 如果中断线程太多则按优先级组成红黑树
    list_h_t    i_serfisrlst;   // 也可以使用中断回调函数的方式
    uint_t      i_serfisrnr;    // 中断回调函数个数
    void*       i_msgmpool;     // 可能的中断消息池
    void*       i_privp;
    void*       i_extp;
} intfltdsc_t;

// 中断运行结构体
typedef struct s_INTSERDSC {
    list_h_t    s_list;         // 在中断异常描述符中的链表
    list_h_t    s_indevlst;     // 在设备描述描述符中的链表
    u32_t       s_flg;
    intfltdsc_t *s_intfltp;     // 指向中断异常描述符
    void*       s_device;       // 指向设备描述符
    uint_t      s_indx;
    intflthandle_t s_handle;    // 中断处理的回调函数指针
} intserdsc_t;

typedef struct s_KITHREAD {
    spinlock_t  kit_lock;
    list_h_t    kit_list; 
    u32_t       kit_flg;
    u32_t       kit_stus;
    uint_t      kit_prity;
    u64_t       kit_scdidx;
    uint_t      kit_runmode;
    uint_t      kit_cpuid;
    u16_t       kit_cs;
    u16_t       kit_ss;
    uint_t      kit_nxteip;
    uint_t      kit_nxtesp;
    void*       kit_stk;
    size_t      kit_stksz;
    void*       kit_runadr;
    void*       kit_binmodadr;
    void*       kit_mmdsc;
    void*       kit_privp;
    void*       kit_extp;
} kithread_t;

#endif

#endif